home *** CD-ROM | disk | FTP | other *** search
/ Aminet 35 / Aminet 35 (2000)(Schatztruhe)[!][Feb 2000].iso / Aminet / comm / tcp / samba_2.0.6.lha / source / amiga_rcs / Assert.c < prev    next >
Encoding:
C/C++ Source or Header  |  1999-12-25  |  7.0 KB  |  402 lines

  1. head    1.1;
  2. access;
  3. symbols
  4.     V1_12:1.1
  5.     V1_11:1.1
  6.     V1_10:1.1
  7.     V1_9:1.1
  8.     V1_8:1.1
  9.     V1_7:1.1
  10.     V1_6:1.1
  11.     V1_5:1.1
  12.     V1_4:1.1
  13.     V1_3:1.1
  14.     V1_2:1.1
  15.     V1_1:1.1;
  16. locks
  17.     olsen:1.1; strict;
  18. comment    @ * @;
  19.  
  20.  
  21. 1.1
  22. date    99.02.06.12.18.32;    author olsen;    state Exp;
  23. branches;
  24. next    ;
  25.  
  26.  
  27. desc
  28. @.
  29. @
  30.  
  31.  
  32. 1.1
  33. log
  34. @.
  35. @
  36. text
  37. @/*
  38.  * $Id: Assert.c 1.1 1999/02/06 12:18:32 olsen Exp olsen $
  39.  *
  40.  * :ts=8
  41.  *
  42.  * AmigaOS wrapper routines for Samba 2.0.0, using the AmiTCP V4 API
  43.  * and the SAS/C V6.58 compiler.
  44.  *
  45.  * Copyright (C) 1999 by Olaf `Olsen' Barthel <olsen@@sourcery.han.de>
  46.  *
  47.  * This program is free software; you can redistribute it and/or modify
  48.  * it under the terms of the GNU General Public License as published by
  49.  * the Free Software Foundation; either version 2 of the License, or
  50.  * (at your option) any later version.
  51.  * 
  52.  * This program is distributed in the hope that it will be useful,
  53.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  54.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  55.  * GNU General Public License for more details.
  56.  * 
  57.  * You should have received a copy of the GNU General Public License
  58.  * along with this program; if not, write to the Free Software
  59.  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  60.  */
  61.  
  62. /****************************************************************************/
  63.  
  64. #include <dos/dos.h>
  65.  
  66. #include <clib/exec_protos.h>
  67. #include <clib/dos_protos.h>
  68.  
  69. #include <pragmas/exec_pragmas.h>
  70. #include <pragmas/dos_pragmas.h>
  71.  
  72. #include <string.h>
  73.  
  74. extern struct Library * SysBase;
  75.  
  76. extern void kprintf(const char *,...);
  77. extern void __stdargs kputc(char c);
  78.  
  79. /****************************************************************************/
  80.  
  81. #include <stdarg.h>
  82.  
  83. /****************************************************************************/
  84.  
  85. #define DEBUGLEVEL_OnlyAsserts    0
  86. #define DEBUGLEVEL_Reports    1
  87. #define DEBUGLEVEL_CallTracing    2
  88.  
  89. /****************************************************************************/
  90.  
  91. static int indent_level = 0;
  92. static int debug_level = DEBUGLEVEL_CallTracing;
  93.  
  94. static char program_name[40];
  95. static int program_name_len = 0;
  96.  
  97. /****************************************************************************/
  98.  
  99. void
  100. _SETPROGRAMNAME(char *name)
  101. {
  102.     if(name != NULL && name[0] != '\0')
  103.     {
  104.         program_name_len = strlen(name);
  105.         if(program_name_len >= sizeof(program_name))
  106.             program_name_len = sizeof(program_name)-1;
  107.  
  108.         strncpy(program_name,name,program_name_len);
  109.         program_name[program_name_len] = '\0';
  110.     }
  111.     else
  112.     {
  113.         program_name_len = 0;
  114.     }
  115. }
  116.  
  117. /****************************************************************************/
  118.  
  119. int
  120. _SETDEBUGLEVEL(int level)
  121. {
  122.     int old_level = debug_level;
  123.  
  124.     debug_level = level;
  125.  
  126.     return(old_level);
  127. }
  128.  
  129. /****************************************************************************/
  130.  
  131. static int previous_debug_level = -1;
  132.  
  133. void
  134. _PUSHDEBUGLEVEL(int level)
  135. {
  136.     previous_debug_level = _SETDEBUGLEVEL(level);
  137. }
  138.  
  139. void
  140. _POPDEBUGLEVEL(void)
  141. {
  142.     if(previous_debug_level != -1)
  143.     {
  144.         _SETDEBUGLEVEL(previous_debug_level);
  145.  
  146.         previous_debug_level = -1;
  147.     }
  148. }
  149.  
  150. /****************************************************************************/
  151.  
  152. void
  153. _INDENT(void)
  154. {
  155.     if(program_name_len > 0)
  156.         kprintf("(%s) ",program_name);
  157.  
  158.     if(debug_level >= DEBUGLEVEL_CallTracing)
  159.     {
  160.         int i;
  161.  
  162.         for(i = 0 ; i < indent_level ; i++)
  163.             kprintf("   ");
  164.     }
  165. }
  166.  
  167. /****************************************************************************/
  168.  
  169. void
  170. _SHOWVALUE(
  171.     unsigned long value,
  172.     int size,
  173.     const char *name,
  174.     const char *file,
  175.     int line)
  176. {
  177.     if(debug_level >= DEBUGLEVEL_Reports)
  178.     {
  179.         char *fmt;
  180.  
  181.         switch(size)
  182.         {
  183.             case 1:
  184.     
  185.                 fmt = "%s:%ld:%s = %ld, 0x%02lx";
  186.                 break;
  187.     
  188.             case 2:
  189.     
  190.                 fmt = "%s:%ld:%s = %ld, 0x%04lx";
  191.                 break;
  192.     
  193.             default:
  194.     
  195.                 fmt = "%s:%ld:%s = %ld, 0x%08lx";
  196.                 break;
  197.         }
  198.     
  199.         _INDENT();
  200.     
  201.         kprintf(fmt,file,line,name,value,value);
  202.     
  203.         if(size == 1 && value < 256)
  204.         {
  205.             if(value < ' ' || (value >= 127 && value < 160))
  206.                 kprintf(", '\\x%02lx'",value);
  207.             else
  208.                 kprintf(", '%lc'",value);
  209.         }
  210.     
  211.         kprintf("\n");
  212.     }
  213. }
  214.  
  215. /****************************************************************************/
  216.  
  217. void
  218. _SHOWSTRING(
  219.     const char *string,
  220.     const char *name,
  221.     const char *file,
  222.     int line)
  223. {
  224.     if(debug_level >= DEBUGLEVEL_Reports)
  225.     {
  226.         _INDENT();
  227.         kprintf("%s:%ld:%s = 0x%08lx \"%s\"\n",file,line,name,string,string);
  228.     }
  229. }
  230.  
  231. /****************************************************************************/
  232.  
  233. void
  234. _SHOWMSG(
  235.     const char *string,
  236.     const char *file,
  237.     int line)
  238. {
  239.     if(debug_level >= DEBUGLEVEL_Reports)
  240.     {
  241.         _INDENT();
  242.         kprintf("%s:%ld:%s\n",file,line,string);
  243.     }
  244. }
  245.  
  246. /****************************************************************************/
  247.  
  248. void
  249. _DPRINTF_HEADER(
  250.     const char *file,
  251.     int line)
  252. {
  253.     if(debug_level >= DEBUGLEVEL_Reports)
  254.     {
  255.         _INDENT();
  256.         kprintf("%s:%ld:",file,line);
  257.     }
  258. }
  259.  
  260. static void __asm
  261. putch(register __d0 c)
  262. {
  263.     if(c != '\0')
  264.         kputc(c);
  265. }
  266.  
  267. void
  268. _DPRINTF(const char *fmt,...)
  269. {
  270.     if(debug_level >= DEBUGLEVEL_Reports)
  271.     {
  272.         va_list args;
  273.  
  274.         va_start(args,fmt);
  275.         RawDoFmt((char *)fmt,args,(VOID (*)())putch,NULL);
  276.         va_end(args);
  277.  
  278.         kprintf("\n");
  279.     }
  280. }
  281.  
  282. /****************************************************************************/
  283.  
  284. void
  285. _ENTER(
  286.     const char *file,
  287.     int line,
  288.     const char *function)
  289. {
  290.     if(debug_level >= DEBUGLEVEL_CallTracing)
  291.     {
  292.         _INDENT();
  293.         kprintf("%s:%ld:Entering %s\n",file,line,function);
  294.     }
  295.  
  296.     indent_level++;
  297. }
  298.  
  299. void
  300. _LEAVE(
  301.     const char *file,
  302.     int line,
  303.     const char *function)
  304. {
  305.     indent_level--;
  306.  
  307.     if(debug_level >= DEBUGLEVEL_CallTracing)
  308.     {
  309.         _INDENT();
  310.         kprintf("%s:%ld: Leaving %s\n",file,line,function);
  311.     }
  312. }
  313.  
  314. void
  315. _RETURN(
  316.     const char *file,
  317.     int line,
  318.     const char *function,
  319.     unsigned long result)
  320. {
  321.     indent_level--;
  322.  
  323.     if(debug_level >= DEBUGLEVEL_CallTracing)
  324.     {
  325.         _INDENT();
  326.         kprintf("%s:%ld: Leaving %s (result 0x%08lx, %ld)\n",file,line,function,result,result);
  327.     }
  328. }
  329.  
  330. /****************************************************************************/
  331.  
  332. void
  333. _ASSERT(
  334.     int x,
  335.     const char *xs,
  336.     const char *file,
  337.     int line,
  338.     const char *function)
  339. {
  340.     #ifdef CONFIRM
  341.     {
  342.         STATIC BOOL ScrollMode    = FALSE;
  343.         STATIC BOOL BatchMode    = FALSE;
  344.     
  345.         if(BatchMode == FALSE)
  346.         {
  347.             if(x == 0)
  348.             {
  349.                 kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
  350.                         file,
  351.                         line,
  352.                         xs,
  353.                         function);
  354.     
  355.                 if(ScrollMode == FALSE)
  356.                 {
  357.                     ULONG Signals;
  358.     
  359.                     SetSignal(0,SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
  360.     
  361.                     kprintf(" ^C to continue, ^D to enter scroll mode, ^E to enter batch mode\r");
  362.     
  363.                     Signals = Wait(SIGBREAKF_CTRL_C | SIGBREAKF_CTRL_D | SIGBREAKF_CTRL_E);
  364.     
  365.                     if(Signals & SIGBREAKF_CTRL_D)
  366.                     {
  367.                         ScrollMode = TRUE;
  368.     
  369.                         kprintf("Ok, entering scroll mode\033[K\n");
  370.                     }
  371.                     else if (Signals & SIGBREAKF_CTRL_E)
  372.                     {
  373.                         BatchMode = TRUE;
  374.     
  375.                         kprintf("Ok, entering batch mode\033[K\n");
  376.                     }
  377.                     else
  378.                     {
  379.                         /* Continue */
  380.     
  381.                         kprintf("\033[K\r");
  382.                     }
  383.                 }
  384.             }
  385.         }
  386.     }
  387.     #else
  388.     {
  389.         if(x == 0)
  390.         {
  391.             _INDENT();
  392.             kprintf("%s:%ld:Expression `%s' failed assertion in %s().\n",
  393.                     file,
  394.                     line,
  395.                     xs,
  396.                     function);
  397.         }
  398.     }
  399.     #endif    /* CONFIRM */
  400. }
  401. @
  402.